/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.ui;

import fait.ferm.global.Glob;
import fait.ferm.persists.Staff_table;
import fait.ferm.persists.Staff_type;
import fait.ferm.tools.Tools;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;

/**
 *
 * @author Greg
 */
public class StaffManagementTabDialogController implements Initializable {
    //переменные для хранения всех параметров объекта
    public Staff_table cur_staff;
    public Staff_type cur_staff_type;
    public ArrayList<Staff_type> al;
    
    //переменные для хранения максимального уровня профессии
    int MAX_SKILL, ID_MAX_SKILL;
    
    //переменные для общения с формой
    @FXML
    public AnchorPane rootPane;
    @FXML
    public AnchorPane chPane;
    @FXML
    public Label name;
    @FXML
    public Label salary;
    @FXML
    public Label skill;
    @FXML
    public ChoiceBox<String> diffSalary;
    @FXML
    public Button training;
    
    //увольнение
    @FXML
    public void dismissOnAction() {
        try {
            cur_staff.delete();
        } catch (SQLException ex) {
            Logger.getLogger(StaffManagementTabDialogController.class.getName()).log(Level.SEVERE, null, ex);
        }
        closeDialog();
    }
    
    //повышение
    @FXML
    public void trainingOnAction() {
        try {
            cur_staff_type = new Staff_type(ID_MAX_SKILL);
            training.setDisable(true);
            skill.setText("" + cur_staff_type.skill);
        } catch (Exception ex) {
            Logger.getLogger(StaffManagementTabDialogController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    //сохранение объекта
    @FXML
    public void save() {
        try {
            cur_staff.staff_type = cur_staff_type;
            if(diffSalary.getValue() != null) {
                cur_staff.salary += Double.parseDouble(diffSalary.getValue().replace(",", "."));
            }
            cur_staff.save();
        } catch(Exception ex) {
            //
        }
        closeDialog();
    }
    
    @FXML
    public void closeDialog() {
        rootPane.getChildren().clear();
        rootPane.setVisible(false);
    }
    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        if(StaffManagementTabController.notEdit) { return; }
        //двигаем диалоговое окно на середину экрана //не работает
        chPane.setLayoutX(300);
        chPane.setLayoutY(300);
        
        //заполняем все параметры
        try {
            cur_staff = StaffManagementTabController.cur_staff;
            cur_staff_type = cur_staff.staff_type;
            al = (ArrayList<Staff_type>)Glob.getFermEngine().getStaff_typeFromJob(cur_staff_type.job).obj;
        } catch (Exception ex) {
            Logger.getLogger(StaffManagementTabDialogController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        //получаем и чистим модель choicebox
        ObservableList model_diffSalary = diffSalary.getItems();
        model_diffSalary.clear();
        
        //заполняем choisebox цифрами типа double от -5 до 5, с шагом 0.1
        for(double e = -5; e <= 5; e += 0.1) {
            model_diffSalary.add(String.format("%.2f", e));
        }
        
        //выводим информацию на экран
        name.setText(cur_staff.toString());
        salary.setText(String.format("%.2f", cur_staff.salary));
        skill.setText(cur_staff_type.skill + "");
        
        //определяем максимальный уровень профессии
        for(int i = 0; i < al.size(); ++i) {
            int cur_skill = al.get(i).skill;
            if((i == 0) || (MAX_SKILL > cur_skill)) {
                MAX_SKILL = cur_skill;
                ID_MAX_SKILL = al.get(i).getId();
            }
        }
        
        //если у работника максимальный уровень, то делаем кноку повышения недоступной
        if(MAX_SKILL == cur_staff_type.skill) {
            training.setDisable(true);
        }
    }
    
}
